#include <iostream>
#include <vector>

using namespace std;

// 此注释占位符，可添加类的功能说明，这里定义一个用于解决特定问题的解决方案类。

class Solution {
public:
  int minZeroArray(vector<int> &nums, vector<vector<int>> &queries) {
    int right = queries.size();
    if(!isZeroArray(nums, queries, right)) {
      return -1;
    }
    int left = 0;
    int ans = right;
    while (left <= right) {
      int mid = left + (right - left) / 2;
      if (isZeroArray(nums, queries, mid)) {
        ans = mid;
        right = mid - 1;
      } else {
        left = mid + 1;
      }
    }
    return ans;
  }
  // 检查在前 k 个查询操作后，数组 nums 是否能变为全零数组。
  // @param nums 输入的目标数组。
  // @param queries 包含多个查询操作的二维数组，每个查询操作由 [left, right, sub] 组成。
  // @param k 表示考虑前 k 个查询操作。
  // @return 如果能变为全零数组返回 true，否则返回 false。
bool isZeroArray(vector<int> &nums, vector<vector<int>> &queries, int k) {
    vector<int> diff(nums.size(), 0);
    // 遍历前 k 个查询操作，更新差分数组。
    for (int i = 0; i < k; i++) {
        int sub = queries[i][2];
        int left = queries[i][0];
        int right = queries[i][1];
        diff[left] += sub;
        if (right + 1 < diff.size()) {
            diff[right + 1] -= sub;
        }
    }
    // 初始化结果数组，第一个元素等于差分数组的第一个元素。
    vector<int> res(nums.size(), 0);
    res[0] = diff[0];
    // 检查第一个元素是否满足要求，若不满足则直接返回 false。
    if(res[0] < nums[0]) {
        return false;
    }
    // 计算结果数组的后续元素，并检查是否满足要求。
    for (int i = 1; i < nums.size(); i++) {
        res[i] = res[i - 1] + diff[i];
        // 若当前元素小于 nums 数组对应位置的元素，说明无法变为全零数组，返回 false。
        if(res[i] < nums[i]) {
            return false;
        }
    }
    return true;
  }
};

int main() {
  Solution s;
  vector<int> nums = {5};
  vector<vector<int>> queries = {{0,0,5}, {0,0,1}, {0,0,3},{0,0,2}};
  cout << s.minZeroArray(nums, queries) << endl;
}